//<![CDATA[

// Global variables
var MAXradius = 60;
var MINradius = 10;
var DEFradius = 20; // Значение радиуса по умолчанию.
var mapZoom = 11; // Масштаб карты по умолчанию
var count = 0;

var mapdiv = document.getElementById("map");
var debug = document.getElementById("debug");

var polyNumSides = 36; // колличество сторон многогранника
var polySideLength = 10; // размер каждой стороны
var lineColor = "#048CAE";
var fillColor = "#048CAE";
var lineWeight = 2;
var lineOpacity = .9;
var fillOpacity = .2;

var points = new Array();
var markers = new Array();
var rads = new Array();

var polyRadius = DEFradius;
var highlightCircle;
var ResizeMarker;
var map;
var tooltip;
var projection = G_NORMAL_MAP.getProjection();

// Обработка запроса - передача параметров файлу handler.php
function ButtonClick() {
	var hstart = document.getElementById("hstart").value;
	var hstop = document.getElementById("hstop").value;
	var mstart = document.getElementById("mstart").value;
	var mstop = document.getElementById("mstop").value;
	var plstart = document.getElementById("plstart").value;
	var plstop = document.getElementById("plstop").value;
	var diap = document.getElementById("diap").value;
	var ydate = document.getElementById("ydate").value;
	var mdate = document.getElementById("mdate").value;
	var ddate = document.getElementById("ddate").value;
	// Преобразование даты в нормальный вид
	var date = ddate +"."+ mdate +"."+ ydate;
	// Преобразование времени в нормальный вид
	var start = hstart + ":" + mstart + ":00";
	var stop = hstop + ":" + mstop + ":00";
	// Создание строки с координатами

//Формируем XML файл.
	var request = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>";
	request +=	"<wish>";
	request +=	"<points>";
	for (i = 0; i < markers.length; i++) {
		lat = markers[i].getPoint().lat();
		lng = markers[i].getPoint().lng();
		rad = rads[i];
		request +=	"<point lat=\"" + lat + "\" lng=\"" + lng + "\" radius=\""+rad+"\" status=\"" + i + "\" />";
	}
	request +=	"</points>";
	request +=	"<info>";
	request +=	"<date value=\"" + date + "\" diap=\"" + diap + "\" />";
	request +=	"<start time=\"" + start + "\" />";
	request +=	"<stop time=\"" + stop + "\" />";
	request +=	"</info>";
	request +=	"</wish>";
	loadpage("handler2.php?xml=" + request,"result")
	//window.location = "handler2.php?xml=" + request;
}

function addIcon(icon) { // Add icon attributes

	icon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
	icon.iconSize = new GSize(21, 34);
	icon.shadowSize = new GSize(31, 34);
	icon.iconAnchor = new GPoint(10, 34);
	icon.infoWindowAnchor = new GPoint(5, 1);
}

function showTooltip(marker) { // Отображение надписи над точками

	tooltip.innerHTML = marker.tooltip;
	tooltip.style.display = "block";

	// Прозрачность - специально для IE
	if (typeof (tooltip.style.filter) == "string") {
		tooltip.style.filter = "alpha(opacity:70)";
	}

	var point = projection.fromLatLngToPixel(map.fromDivPixelToLatLng(new GPoint(
			0, 0), true), map.getZoom());
	var offset = projection.fromLatLngToPixel(marker.getLatLng(), map.getZoom());
	var anchor = marker.getIcon().iconAnchor;
	var width = marker.getIcon().iconSize.width + 6;
	var height = 10;
	var pos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(offset.x
			- point.x - anchor.x + width, offset.y - point.y - anchor.y
			- height));
	pos.apply(tooltip);

}

function buildMap() {

	map = new GMap2(mapdiv, {
		draggableCursor : "auto",
		draggingCursor : "move"
	});

	// Add a div element for toolips
	tooltip = document.createElement("div");
	tooltip.className = "tooltip";
	map.getPane(G_MAP_MARKER_PANE).appendChild(tooltip);

	// Load initial map and a bunch of controls
	map.setCenter(new GLatLng(56.285678, 43.965225), mapZoom);
	map.addControl(new GSmallMapControl()); // Zoom control
	map.addMapType(G_PHYSICAL_MAP);

	map.enableDoubleClickZoom();
	map.disableScrollWheelZoom();

	// Add click listener
	GEvent.addListener(map, "click", createMarker);

}

function createMarker(overlay, point) {

	if (point && markers.length<2) {

		var icon = new GIcon();
		addIcon(icon);
		
		// Создание маркера, отрисовка его на карте и заталкивание в стек с
		// маркерами.
		var marker = new GMarker(point, {
			icon : icon,
			draggable : true,
			bouncy : true,
			dragCrossMove : true,
		});
		
		var rad = DEFradius; // Текущий радиус (по умолчанию DEFradius)
		for ( var n = 0; n < 2; n++) {
			rads[n] = DEFradius;
		}
		
		map.addOverlay(marker);
		markers.push(marker);
		
		// Отрисовка радиуса вокруг точки
		function circle(radius) {
			
			if (highlightCircle) {
				map.removeOverlay(highlightCircle);
			}

			if (ResizeMarker) {
				map.removeOverlay(ResizeMarker);
			}
			
			// Если передается параметр radius, то используем его.
			if (radius) polyRadius = radius;
						
			for ( var n = 0; n < markers.length; n++) {
				if ((markers[n] == marker) && (rad != radius)) {
					rads[n] =  radius/map.getZoom(); 
					rad = polyRadius;
					break;
				}
			}
		
		/*		
			debug.innerHTML = "";
			for ( var n = 0; n < rads.length; n++) {
				debug.innerHTML += "RADIUS [" + n + "]=" + rads[n] + "<br>";
			}
		*/		
			var markerPoint = marker.getPoint();
			var polyPoints = Array();

			var clickedPixel = projection.fromLatLngToPixel(markerPoint, mapZoom);

			for ( var a = 0; a < (polyNumSides + 1); a++) {
				var aRad = polySideLength * a * (Math.PI / 180);
				var pixelX = clickedPixel.x + polyRadius * Math.cos(aRad);
				var pixelY = clickedPixel.y + polyRadius * Math.sin(aRad);
				var polyPixel = new GPoint(pixelX, pixelY);
				var polyPoint = projection.fromPixelToLatLng(polyPixel, mapZoom);
				polyPoints.push(polyPoint);
			}

			// Использование GPolygon(points, strokeColor?, strokeWeight?,
			// strokeOpacity?, fillColor?, fillOpacity?)
			highlightCircle = new GPolygon(polyPoints, lineColor, lineWeight,
					lineOpacity, fillColor, fillOpacity);
			map.addOverlay(highlightCircle);

			var ResizePixel = new GPoint(pixelX, pixelY);
			var ResizePoint = projection.fromPixelToLatLng(ResizePixel, mapZoom);
			var ResizeIcon = new Object();

			ResizeIcon.icon = new GIcon();
			ResizeIcon.icon.image = "resize.png";
			ResizeIcon.icon.iconSize = new GSize(25, 20);
			ResizeIcon.icon.shadowSize = new GSize(0, 0);
			ResizeIcon.icon.iconAnchor = new GPoint(12, 10);
			ResizeIcon.draggable = true;
			ResizeIcon.bouncy = false;

			ResizeMarker = new GMarker(ResizePoint, ResizeIcon);
			map.addOverlay(ResizeMarker);

			GEvent.addListener(ResizeMarker, "dragend", function() {
				var cursor = projection.fromLatLngToPixel(ResizeMarker.getPoint(), mapZoom);
				updateCircle(clickedPixel, cursor);
			});

			GEvent.addListener(ResizeMarker, "drag", function() {
				var cursor = projection.fromLatLngToPixel(ResizeMarker.getPoint(), mapZoom);		
				//updateCircle(clickedPixel, cursor); //Почему-то не работает...
			});
		}

		function updateCircle(center, marker) {
			var point1 = new GPoint(0, 0);
			var point2 = new GPoint(marker.x - center.x, marker.y - center.y);
			radius = Math.sqrt(point2.x * point2.x + point2.y * point2.y); // radius = sqrt(x^2 + y^2)
			
			// Нельзя задать слишком большой/маленький радиус
			if (radius > MAXradius)	radius = MAXradius;
			else if (radius < MINradius) radius = MINradius;
			
			//debug.innerHTML = "<br>radius = " + radius + "<br>point1(center) " + point1 + "<br>point2(marker) = " + point2; //DEBUG
			
			circle(radius);
		}

		// Отображать радиус при наведении мышки на маркер
		GEvent.addListener(marker, "mouseover", function() {
			showTooltip(marker);
			circle(rad);
		});

		// При убирании мышки с маркера радиус удаляется
		GEvent.addListener(marker, "mouseout", function() {
			tooltip.style.display = "none";
			// map.removeOverlay(highlightCircle);
			// map.removeOverlay(ResizeMarker);
		});

		// При перетаскивании маркера радиус тоже перетаскивается
		GEvent.addListener(marker, "drag", function() {
			showTooltip(marker);
			circle(rad);
			drawOverlay();
		});

		// Удаление маркера при повторном клике
		GEvent.addListener(marker, "click", function() {
			tooltip.style.display = "none";

			// Удаление маркера и радиуса под ним
				for ( var n = 0; n < markers.length; n++) {
					if (markers[n] == marker) {
						map.removeOverlay(markers[n]);
						map.removeOverlay(highlightCircle);
						map.removeOverlay(ResizeMarker);
						break;
					}
				}

				// Удалить из массивов
				markers.splice(n, 1);
				rads.splice(n, 1);
				
				if (markers.length == 0) {
					count = 0;
				} else {
					count = markers[markers.length - 1].content;
					drawOverlay();
				}
		});
		circle(rad); // При клике сразу отрисовывается радиус
		// var timer = setTimeout("map.removeOverlay(highlightCircle)",1500);
		drawOverlay();
	}
}

function drawOverlay() {

	points.length = 0;

	for (i = 0; i < markers.length; i++) {
		points.push(markers[i].getLatLng());
	}

	markers[0].tooltip = "Начало";
	markers[0].setImage("green.png");
	if (markers.length==2) {
		markers[1].tooltip = "Конец";
		markers[1].setImage("red.png");
	}
	
}

function clearMap() {
	// Очистка существующей карты. Сброс массивов.
	map.clearOverlays();
	points.length = 0;
	markers.length = 0;
	rads.length = 0;
	count = 0;
	debug.innerHTML = "&nbsp;";
}

// ]]>
